/**
 * 加载语言相关设置，包括代码高亮配置
 * 对页面中的代码进行高亮处理，并注册自定义的代码高亮语言规则
 */
function loadLanguage() {
    // 对页面中所有符合条件的代码块进行高亮处理
    hljs.highlightAll();
    // 注册 mermaid 语言的高亮规则
    hljs.registerLanguage('mermaid', () => mermaidHighlight());
    // 注册 echarts 语言的高亮规则，使用 json 语言的高亮规则
    hljs.registerLanguage('echarts', () => hljs.getLanguage('json'));
    // 注册 powershell 语言的高亮规则，使用 python 语言的高亮规则
    hljs.registerLanguage('powershell', () => hljs.getLanguage('python'));
};

/**
 * mermaid语言 高亮规则
 */
function mermaidHighlight() {
    return {
        name: 'Mermaid',
        aliases: ['mmd'], // 可选别名
        contains: [
            {
                className: 'keyword',
                begin: '\\b(flowchart|graph|pie|gantt|sequenceDiagram|classDiagram|stateDiagram|erDiagram|journey|gitGraph|subgraph|end|click)\\b',
                relevance: 10
            },
            {
                className: 'title',
                begin: 'title\\s+["\']?',
                end: '["\']?|$',
                excludeBegin: true
            },
            {
                className: 'symbol',
                begin: /[+\-*/%&|=<>^~]|\.\.|\-\-|\|\|/ // 扩展操作符支持
            },
            {
                className: 'comment',
                begin: '%%.*',
                end: '$',
                relevance: 0
            },
            {
                className: 'string',
                begin: /"[^"]*"/,
                end: /[^\\]"/
            },
            {
                className: 'number',
                begin: '\\b\\d+(\\.\\d+)?\\b'
            }
        ]
    }
};

/**
 * 定义 mermaid 图表库的初始化参数
 *
 * 该对象包含了图表的基本配置、主题设置、安全级别以及流程图的特定配置
 */
const mermaidParameter = {
    // 页面加载时自动渲染图表
    startOnLoad: true,
    // 根据当前页面主题选择 mermaid 图表主题，若为深色模式则使用深色主题，否则使用默认主题
    theme: document.body.classList.contains("dark-mode") ? "dark" : "default",
    // 设置安全级别为宽松，允许更灵活的渲染配置
    securityLevel: "loose",
    // 使用继承的字体，保持与页面整体字体一致
    fontFamily: "inherit",
    // 流程图配置，包含流程图的布局、样式等相关设置
    flowchart: {
        // 流程图方向为从左到右
        rankDir: 'LR',
        // 使用最大宽度，使流程图充分利用可用空间
        useMaxWidth: true,
        // 曲线类型为阶梯状
        curve: 'stepAfter',
        // 禁用 HTML 标签，防止 XSS 攻击并保持渲染一致性
        htmlLabels: false,
        // 图表内边距为 0，减少不必要的空白
        diagramPadding: 0,
        // 默认渲染器为 canvas，使用 canvas 进行图表渲染
        defaultRenderer: 'canvas',
    }
};